package com.fan.analysis.module.preprocessing.fusion.dao;

import com.fan.analysis.module.preprocessing.fusion.domain.bo.CallCountBo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 操作数据库的dao
 *
 * @author fan
 * @date 2021/09/20 12:56
 **/
@Component
@Mapper
public interface FusionDao {


    /**
     * 统计指定主叫的通话记录数量
     *
     * @param callingNum 主叫
     * @return 指定主叫的通话记录数量
     */
    List<CallCountBo> callCountByCallingNum(@Param("callingNum") String callingNum);


    /**
     * 统计指定被叫的通话记录数量
     *
     * @param calledNum 主叫
     * @return 指定被叫的通话记录数量
     */
    List<CallCountBo> callCountByCalledNum(@Param("calledNum") String calledNum);


    /**
     * 统计常用联系时间段
     *
     * @param callingNum 主叫
     * @param calledNum  被叫
     * @return 常用联系时间段
     */
    CallCountBo commonContactTimePeriod(@Param("callingNum") String callingNum, @Param("calledNum") String calledNum);

    /**
     * 统计发送方的短信数量
     *
     * @param sendNum 发送方
     * @return 发送方的短信数量
     */
    List<CallCountBo> messageCountBySendNum(@Param("sendNum") String sendNum);

    /**
     * 统计接收方的短信数量
     *
     * @param recNum 接收方
     * @return 接收方的短信数量
     */
    List<CallCountBo> messageCountByRecNum(@Param("recNum") String recNum);

    /**
     * 查询发送方或者接收方为该手机号的短信内容
     *
     * @param phoneNum 手机号
     * @return 短信内容的集合
     */
    List<String> contentByPhoneNum(@Param("phoneNum") String phoneNum);


    /**
     * 通过主叫和被叫更新两者通话记录数量
     *
     * @param phoneNum1 主叫
     * @param phoneNum2 被叫
     * @param callCount 通话数量
     * @return 更新是否成功
     */
    Integer updateCallNumber(@Param("phoneNum1") String phoneNum1, @Param("phoneNum2") String phoneNum2, @Param("num") Integer callCount);


    /**
     * 通过发送方和接收方更新两者通话记录数量
     *
     * @param phoneNum1    发送方
     * @param phoneNum2    接收方
     * @param messageCount 短信数量
     * @return 更新是否成功
     */
    Integer updateMessageNumber(@Param("phoneNum1") String phoneNum1, @Param("phoneNum2") String phoneNum2, @Param("num") Integer messageCount);


    /**
     * 通过主叫和被叫更新两者通话记录常用联系时间段
     *
     * @param phoneNum1   主叫
     * @param phoneNum2   被叫
     * @param contactTime 常用联系时间段
     * @return 叫和被叫更新两者通话记录常用联系时间段
     */
    Integer updateContactTime(@Param("phoneNum1") String phoneNum1, @Param("phoneNum2") String phoneNum2, @Param("contactTime") String contactTime);


    /**
     * 更新是否补齐的标志
     *
     * @param flag    标志1
     * @param callNum 电话号
     * @return 更新是否成功
     */
    Integer updateFlag(@Param("flag") Integer flag, @Param("callNum") String callNum);

    /**
     * 更新短信记录是否已统计
     *
     * @param flag     1 代表已经统计
     * @param phoneNum 手机号
     * @return 是否成功
     */
    Integer updateMessageFlag(@Param("flag") Integer flag, @Param("phoneNum") String phoneNum);

    /**
     * 更新用户的关键词
     *
     * @param phoneNum 手机号
     * @param keywords 关键词
     * @return 更新是否成功
     */
    Integer updateUserKeywords(@Param("phoneNum") String phoneNum, @Param("keywords") String keywords);
}
